GVKun编程网logo

java – Retrofit返回null值(java返回值是什么意思)

9

在这篇文章中,我们将为您详细介绍java–Retrofit返回null值的内容,并且讨论关于java返回值是什么意思的相关问题。此外,我们还会涉及一些关于android–FirebaseAuth.ge

在这篇文章中,我们将为您详细介绍java – Retrofit返回null值的内容,并且讨论关于java返回值是什么意思的相关问题。此外,我们还会涉及一些关于android – FirebaseAuth.getCurrentUser()返回null值、android – sharedpreferences返回null值、android – View.getContext返回null,为什么?、android – 方法返回null值的知识,以帮助您更全面地了解这个主题。

本文目录一览:

java – Retrofit返回null值(java返回值是什么意思)

java – Retrofit返回null值(java返回值是什么意思)

我正在使用Retrofit,而且我在Android中非常棒.

我的JSON响应

    {
    "movie": {
        "_id": "568661682d33bca267fdf81b",
        "poster_path": "https://image.tmdb.org/t/p/w154/xHfhQIK4BNlsGv5Ylx8mVq0hJT1.jpg",
        "adult": false,
        "overview": "",
        "release_date": "2015-05-15",
        "id": 76341,
        "original_title": "Mad Max: Fury Road",
        "original_language": "en",
        "title": "Mad Max: Furia en la carretera",
        "Vote_count": 3105,
        "__v": 0,
        "popular": true,
        "production_companies": [],
        "cast": [],
        "genre_ids": [
            53,
            28,
            12
        ]
    }
}

这是我的电影模型:

public class Movie {

public String Id;
//more variables

public String getId() {
    return Id;
}

public void setId(String id) {
    Id = id;
}
//more getter and setter

我的Retrofit界面

public interface MyApiEndPointsInterface {
  @GET("/movie/{id}")
  Call<Movie> getMovie(@Path("id") int id);
}

和活动中的代码

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    MyApiEndPointsInterface apiService =
            retrofit.create(MyApiEndPointsInterface.class);

    Call<Movie> call = apiService.getMovie(76341);

    call.enqueue(new Callback<Movie>() {
        @Override
        public void onResponse(Response<Movie> response, Retrofit retrofit) {
            Log.d("MainActivity", response.body().title);
        }

        @Override
        public void onFailure(Throwable t) {

        }
    });

我认为它可以是JSON响应,因为它有一个优秀的实例,但我不知道如何在代码中使用它.

我没有得到回复,这一切都正确吗?

解决方法:

问题是JSON解析器不期望在JSON中包装“movie”数据的未命名根对象.

如果您可以更改服务器返回的JSON,请删除外部对象,以便您拥有

{
    "_id": "568661682d33bca267fdf81b",
    "poster_path": "https://image.tmdb.org/t/p/w154/xHfhQIK4BNlsGv5Ylx8mVq0hJT1.jpg",
    "adult": false,
    "overview": "",
    "release_date": "2015-05-15",
    "id": 76341,
    "original_title": "Mad Max: Fury Road",
    "original_language": "en",
    "title": "Mad Max: Furia en la carretera",
    "Vote_count": 3105,
    "__v": 0,
    "popular": true,
    "production_companies": [],
    "cast": [],
    "genre_ids": [
        53,
        28,
        12
    ]
}

如果您无法改变服务器的响应,可以通过几种方法在客户端处理它.我只是创建另一个对象来映射到外部JSON对象,因此将现有的Movie类保留为原样,添加:

public class MovieResponse {
 public Movie movie;
}

然后更改Retrofit调用以使用MovieResponse而不是Movie.
然后你可以参考

movieResponse.movie

android – FirebaseAuth.getCurrentUser()返回null值

android – FirebaseAuth.getCurrentUser()返回null值

FirebaseAuth.getCurrentUser()返回null值.以前我的代码工作正常,但几天后它返回currentUser为null.

此外,我已经在另一台设备上尝试了我的应用程序,在该设备中,一切都运行正常,使用相同的代码.

mAuth=FirebaseAuth.getInstance();
mCurrentUser=mAuth.getCurrentUser()
mUserDatabase=FirebaseDatabase.getInstance().getReference().child("Users")
                              .child(mCurrentUser.getUid());

例外:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual
method ‘java.lang.String
com.google.firebase.auth.FirebaseUser.getUid()’ on a null object
reference

我已经尝试删除应用程序数据,卸载并重新安装我的设备上的应用程序但没有任何效果.

我的设备或Firebase有问题吗?

解决方法:

看起来用户没有登录到您的应用程序,这会导致mCurrentUser.getUid()抛出异常.

解决方案是只调用getUid()是否有签名的yser:

mCurrentUser=mAuth.getCurrentUser();
if (mCurrentUser != null) {
    mUserDatabase=FirebaseDatabase.getInstance().getReference().child("Users")
                          .child(mCurrentUser.getUid());
}

android – sharedpreferences返回null值

android – sharedpreferences返回null值

我正在尝试使用sharedpreferences来检查用户在开始使用应用程序之前是否已登录.我在用户登录时将用户名保存在shredpreferences中.

Login.java

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);     
        Button btnLogin = (Button) findViewById(R.id.buttonlogin);      
        btnLogin.setonClickListener(new View.OnClickListener() {
            public void onClick(View adapt) {
                EditText usernameEditText = (EditText) findViewById(R.id.EditUserName);
                userName = usernameEditText.getText().toString();
                EditText passwordEditText = (EditText) findViewById(R.id.EditPassword);
                userPassword = passwordEditText.getText().toString();               
                if (userName.matches("") && userPassword.matches("")) {
                    toast("Please enter Username and Password");
                    return;
                } else if (userName.matches("") || userName.equals("")) {
                    toast("Please enter Username");
                    return;
                } else if (userPassword.matches("") || userPassword.equals("")) {
                    toast("Please enter Password");
                    return;
                } else {
                    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
                    SharedPreferences.Editor editor = sharedPreferences.edit();
                    editor.putString("MEM1", userName);
                    editor.commit();
                    new DownloadFilesTask().execute();
                }           
            }
        });
    }

    private void toast(String text) {
        Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    }

    private class DownloadFilesTask extends AsyncTask<Void, Void, Void> {
        protected void onPreExecute() {
        }

        protected void onPostExecute(Void result) {
            toast("user logged in");
            startActivity(new Intent(Login.this, MainActivity.class));
            finish();
        }

        @Override
        protected Void doInBackground(Void... params) {         
            return null;
        }
    }

}

我开始使用mainactivity之前尝试检查用户名值.

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
    String username =sharedPreferences.getString("MEM1", "");
    if(username.equalsIgnoreCase("")||username.length()==0)
    {
        toast("username is null");
        startActivity(new Intent(MainActivity.this, Login.class));
        finish();
    }

但用户名始终为null.请帮忙.谢谢

解决方法:

写下代码而不是代码将用户名保存到共享首选项中.

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
SharedPreferences.Editor editor = myPrefs.edit();
editor.putString("MEM1", userName);
editor.commit();

并使用下面的代码获取首选项值.

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
String username = myPrefs.getString("MEM1","");

android – View.getContext返回null,为什么?

android – View.getContext返回null,为什么?

我正在使用带有javascript界面​​的WebView,有时当我在webView上调用loadUrl时,mWebView.getContext()返回null.

>视图如何没有上下文?为什么?
>视图whitout上下文是否仍在使用或可重用?
>当我的观点没有背景时,我该怎么办?
>最重要的是,如果视图没有上下文,那么mWebView.post(new Runnable(){…会被执行吗?
>这段代码是否相关?

if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
    mWebView.loadUrl("javascript:...");
} else {
    mWebView.post(new Runnable() {
        public void run() {
            mWebView.loadUrl("javascript:...");
        }
    });
}

解决方法:

视图的空上下文的2个常见原因:

>您正在尝试在异步(处理程序,网络调用)调用的回调中获取上下文,但由于用户的另一个操作(例如:已按下),活动/片段已消失.因此视图被分离并且不再具有上下文.
>您的某处存在内存泄漏,并且您的活动和视图层次结构有两个或更多实例.然后在你不再引用的实例中发生了某些事情,但是视图已经失去了与其上下文的链接.

关于处理程序.
我不确定视图是否有自己的处理程序,或者如果它使用它附加的Activity的处理程序,你可能必须阅读源代码才能找到.然而问题并不是真的相关:如果视图没有上下文,则会出现更大的问题:它不在屏幕上.

关于5.中的代码是否相关,您需要回答这些问题:为什么不知道您的代码在哪个线程上运行?

当你知道自己在哪个线程上,并且如果你不在主线程上是有意义的话,那么使用处理程序是在main上执行代码的有效方法.以及Activity.runOnUiThread()

请记住,Handler的生命周期与活动无关.因此,当活动/片段暂停时,您应该清除消息队列和runnables

android – 方法返回null值

android – 方法返回null值

这是我的布局代码;

static  String userLocation(String url) {

    RequestQueue queue = Volley.newRequestQueue(context);
    // String url = "http://www.jobdiagnosis.com/iphone/userlocation.PHP";

     StringRequest dr = new StringRequest(Request.Method.GET,url,new Response.Listener<String>() 
                {
                    @Override
                    public void onResponse(String response) {
                        // response
                        res=response;
                        //edit_location.setText(response);
                       // Toast.makeText(context,response,Toast.LENGTH_LONG).show();
                    }
                },new Response.ErrorListener() 
                {
                     @Override
                     public void onErrorResponse(VolleyError error) {
                         // error.
                         Toast.makeText(getApplicationContext(),"error"+error,Toast.LENGTH_LONG).show();
                         Log.d("error",""+error);
                   }
                }
            );
            queue.add(dr);
            return res;
 }

当我用同样的方法干杯响应时,响应打印正常
当我调用method和print return语句时,res打印null.

任何帮助表示赞赏.先感谢您.

请建议我如何在一项或多项活动中分享回复

抱歉我的英语不好..

解决方法

尝试将res声明为全局变量.没有返回值.因为您不知道,请求何时完成.并使用此全局变量.

关于java – Retrofit返回null值java返回值是什么意思的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于android – FirebaseAuth.getCurrentUser()返回null值、android – sharedpreferences返回null值、android – View.getContext返回null,为什么?、android – 方法返回null值的相关信息,请在本站寻找。

本文标签: