2016-07-22 87 views
0

我想在android應用程序中顯示json內容,但它沒有讀取它。 我希望它獲得第一頁上的json文件中的「statusmessage」,並將它發送到下一頁並使用共享衝突顯示。 ,但它將返回「anon」作爲值而不是「Hi +2348055550055,爲了訪問此平臺將收取N20.00的訪問費用」。在mainactivity.java的對話框中。我沒有錯誤消息,它不是隻是返回值。在android中顯示json數據?

這是JSON文件

{headers: 
[{ 
id: "4", 
name: "GLO", 
code: "GLO", 
status: "Inactive", 
statusMessage: "Hi +2348055550055, an ACCESS FEE of N20.00 will be charged in order to access this Platform" 
}] 
} 

這是我的主要的java類

package com.mall.first; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.preference.PreferenceManager; 
import android.util.Log; 
import android.view.Window; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.squareup.picasso.Picasso; 

import org.apache.http.NameValuePair; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.List; 

public class ActivitySplash extends Activity { 
    private ProgressDialog pDialog; 
    int flag=0; 

    JSONParser jsonParser = new JSONParser(); 
    private static final String api = "http://10.0.2.2/angl/com.php"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.splash); 
     ImageView image = (ImageView)findViewById(R.id.image1); 

     Picasso.with(getBaseContext()).load("http://api.dobox.tv/img/gloSplashScreen.png").into(image); 

     new CountDownTimer(5000,1000) { 

      @Override 
      public void onFinish() { 
      new loginAccess().execute(); 
       Intent intent = new Intent(getBaseContext(), MainActivity.class); 

       startActivity(intent); 

       finish(); 

      } 
      @Override 
      public void onTick(long millisUntilFinished) { 

      } 
     }.start(); 

    } 

    class loginAccess extends AsyncTask<String, String, Boolean> { 

     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(ActivitySplash.this); 
      pDialog.setMessage("Login..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 
     @Override 
     protected Boolean doInBackground(String... arg0) { 
      // TODO Auto-generated method stub 
      // Check for success tag 
      int success; 


      try { 

       List<NameValuePair> params = new ArrayList<NameValuePair>(); 


       Log.d("request!", "starting"); 

       JSONObject json = jsonParser.getJSONFromUrl(api); 
       // check your log for json response 
       Log.d("Login attempt", json.toString()); 

       JSONArray categories = json.getJSONArray("headers"); 

       for (int i = 0; i < categories.length(); i++) { 
        String state = categories.getJSONObject(i).getString("state"); 
        String status = categories.getJSONObject(i).getString("status"); 

        SharedPreferences sp = PreferenceManager 
          .getDefaultSharedPreferences(ActivitySplash.this); 
        SharedPreferences.Editor edit = sp.edit(); 
        edit.putString("state", state); 

        edit.putString("status", status); 

        edit.commit(); 


        // Close all views 
       } 
      }catch (Throwable e){ 
       e.printStackTrace(); 
      } 
      return true; 
     } 
     protected void onPostExecute(Boolean file_url) { 
      pDialog.dismiss(); 
      if(flag==1) 
       Toast.makeText(ActivitySplash.this,"Please Enter Correct informations", Toast.LENGTH_LONG).show(); 

     } 

    } 
} 

這是我的第二類

​​

回答

0

內CountDownTimer-> OnFinish的代碼是錯誤的因爲你在完成asynctask之前打開了這個意圖。你應該將意圖轉移到你的異想天開的OnPostExecute方法。這樣,您可以確保在打開MainActivity之前將狀態寫入sharedPreferences中。

new CountDownTimer(5000,1000) { 

     @Override 
     public void onFinish() { 
      new loginAccess().execute(); 

      //=========================================================== 
      //Move the following 3 lines to OnPostExecute 
      //=========================================================== 
      Intent intent = new Intent(getBaseContext(), MainActivity.class); 
      startActivity(intent); 
      finish(); 

     } 
     @Override 
     public void onTick(long millisUntilFinished) { 

     } 
    }.start(); 
+0

做了你的建議,它不再改變,因爲它不再移動到其他類 – arinze