2016-09-21 6 views
0

サーバーにデータが保存されている場所にアプリを作成しようとしています。リストビューでデータを取得しています。オンラインにアクセスしたときにデータにアクセスできます.私のコードの設定をしてからデータにアクセスしようとすると、私のコードは次のデータにアクセスできなくなります。 MainActivityインターネットなしでデータにアクセスしているときにAndroid共有設定のエラーが発生しました

public class MainActivity extends AppCompatActivity { 
ListView listView; 
Button button; 
String Url="my server name is here"; 
ArrayList<User> arrayList; 
//MyFile myFile 
public static String SP_FILE_NAME="sp_Listview"; 
//SharedPreferences spfile; 
MySharedPrefLib mySharedPrefLib; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    arrayList = new ArrayList<User>(); 
    //myFile = new MyFile(this); 
    setContentView(R.layout.activity_main); 
    listView = (ListView) findViewById(R.id.listView); 
    button = (Button) findViewById(R.id.button); 


    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (isNetworkAvailable() == true) { 

       StringRequest stringRequest = new StringRequest(Request.Method.POST,Url, new Response.Listener<String>() { 

        @Override 
        public void onResponse(String response) { 
         Log.d("mytag", "Response" + response); 

         mySharedPrefLib.sharedpreferences.edit().putString("response", response).commit(); 

         fillResult(response); 


        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Log.d("Mytag", "Error" + error); 

        } 

       }); 
       RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); 
       requestQueue.add(stringRequest); 
      } else if (mySharedPrefLib.checkSharedPrefs("response")) { 

       fillResult(mySharedPrefLib.getPref("response")); 

      } 
     } 

    }); 
} 

private void fillResult(String response) { 
    try { 
     JSONArray JSONArray = new JSONArray(response); 

     // myFile.sharePref("response"+response).commit; 

     // arrayList = new ArrayList<User>(); 
     for (int i = 0; i < JSONArray.length(); i++) { 
      JSONObject jsonObject = JSONArray.getJSONObject(i); 
      User user = new User(); 

      user.setID(jsonObject.getString("ID")); 
      user.setName(jsonObject.getString("Name")); 
      user.setEmail(jsonObject.getString("Email")); 
      user.setPassword(jsonObject.getString("Password")); 

      arrayList.add(user); 

     } 

     UserAdapter<User> userAdapter = new UserAdapter(getApplicationContext(), arrayList); 
     listView.setAdapter(userAdapter); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

} 

boolean isNetworkAvailable() { 
    ConnectivityManager cm = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting(); 
    return isConnected; 
} 

}

MySharedPrefLib.java私はuser.javaとuseradpter がfollwingされ、さらに2つのクラスは私のエラーログで追加してい代わりに、このの

public class MySharedPrefLib { 

Context context; 
SharedPreferences sharedpreferences; 

public MySharedPrefLib(Context context){ 
    this.context=context; 
    sharedpreferences = context.getSharedPreferences(MainActivity.SP_FILE_NAME, Context.MODE_PRIVATE); 
} 

public void saveSharedPrefs(String user_id, String user_name, String user_email){ 

    SharedPreferences.Editor editor = sharedpreferences.edit(); 
    editor.putString("ID", user_id); 
    editor.putString("Name", user_name); 
    editor.putString("Email", user_email); 
    editor.putString("Password", user_email); 


    editor.commit(); 
} 

public String getPref(String key) { 
    SharedPreferences preferences = context.getSharedPreferences(MainActivity.SP_FILE_NAME, Context.MODE_PRIVATE); 
    return preferences.getString(key, null); 
} 

public void clearSharedPrefs(){ 
    SharedPreferences sharedpreferences = context.getSharedPreferences(MainActivity.SP_FILE_NAME, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedpreferences.edit(); 
    editor.clear(); 
    editor.commit(); 
} 

public boolean checkSharedPrefs(String key){ 
    SharedPreferences sharedPrefs = context.getSharedPreferences(MainActivity.SP_FILE_NAME, Context.MODE_PRIVATE); 
    if(sharedPrefs.contains(key)) { 
     return true; 
    } 
    return false; 
} 

}

エラーL OG

09-21 12:21:40.039 19716-19716/com.example.mahadev.listview2 E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.mahadev.listview2, PID: 19716 
                      java.lang.NullPointerException: Attempt to read from field 'android.content.SharedPreferences com.example.mahadev.listview2.MySharedPrefLib.sharedpreferences' on a null object reference 
                       at com.example.mahadev.listview2.MainActivity$1$1.onResponse(MainActivity.java:58) 
                       at com.example.mahadev.listview2.MainActivity$1$1.onResponse(MainActivity.java:52) 
                       at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 
                       at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 
                       at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:135) 
                       at android.app.ActivityThread.main(ActivityThread.java:5343) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:372) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

エラーどんな提案ここ

mySharedPrefLib.sharedpreferences.edit().putString("response", response).commit(); 

そしてここ

StringRequest stringRequest = new StringRequest(Request.Method.POST,Url, new Response.Listener<String>() { 

を上に来る歓迎されています。

+0

を投げit't初期化されていません。 –

+0

ありがとうございました –

答えて

0

mySharedPrefLib =新しいMySharedPrefLib(コンテキスト)の行を追加します。

これは唯一の問題です。

0

あなたはmySharedPrefLib

このmySharedPrefLib =新しいMySharedPrefLib(これ)を追加初期化するために忘れてしまいました。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    arrayList = new ArrayList<User>(); 
    . 
    . 
    . 
    mySharedPrefLib = new MySharedPrefLib(this); 
0

次の行に"com.example.app"があなたのパッケージ名になります

mySharedPrefLib = this.getSharedPreferences(
     "com.example.app", Context.MODE_PRIVATE); 

を追加します。

あなたmySharedPrefLibとして

mySharedPrefLib.sharedpreferences.edit().putString("response", response).commit(); 

前には、あなたがmySharedPrefLib.sharedpreferencesを初期化していないNullPointerException

関連する問題