2017-03-17 62 views
0

我在這裏有一個問題。從結果中更新ViewPager後Asynctask

我有一個執行的AsyncTask擺脫它連接到MySQL數據庫的PHP文件中的一些結果的login_activity。

public class login_main extends AppCompatActivity implements OnDataSendToActivity{ 
    ViewPager viewPager; 
    CustomAdapter adapter; 

    ArrayList<String> image = new ArrayList<>(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     //setSupportActionBar(toolbar); 

     String type = "getProfileImages"; 

     RetrieveData retrieveData = new RetrieveData(this); 

     retrieveData.execute(type); 

     //After Asycntask, get the result and put back into image array 

     viewPager = (ViewPager) findViewById(R.id.view_pager); 
     adapter = new CustomAdapter(login_main.this,image); 
     viewPager.setAdapter(adapter); 
    } 


    public void sendData(String response) { 
     try { 
      JSONObject jsonObject = new JSONObject(response); 
      JSONArray result = jsonObject.getJSONArray("result"); 

      for (int i = 0 ; i < result.length(); i++) { 
       JSONObject obj = result.getJSONObject(i); 
       String id = obj.getString("image"+i); 
       image.add("http://192.168.12.252/"+id+"/profile.png"); 
      } 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

當我得到的結果,我嘗試通過接口從的AsyncTask

protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     dataSendToActivity.sendData(result); 
} 

一切處理結果不同的是,當我把它傳遞給PageAdapter圖像陣列總是空的是工作的罰款。我如何將數據傳回到asycntask的活動中,並通過使用接口將它推入數組映像,它無法工作。

或者反正我可以直接處理它在Asyntask並更新ViewPager。

這裏是我的AsyncTask

public class RetrieveData extends AsyncTask<String,Void,String>{ 
    Context context; 
    RetrieveData(Context ctx) { 
     context = ctx; 
    } 
    private OnDataSendToActivity dataSendToActivity; 

    public RetrieveData(Activity activity){ 
     dataSendToActivity = (OnDataSendToActivity)activity; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String profile_url = "http://192.168.12.252/getprofile.php"; 
     String image_url = "http://192.168.12.252/imagelist.php"; 
     String type = params[0]; 

     if(type.equals("getProfile")){ 
      try { 
       String user_name = params[1]; 
       URL url = new URL(profile_url); 
       HttpURLConnection httpURLConnection = null; 
       httpURLConnection = (HttpURLConnection)url.openConnection(); 
       httpURLConnection.setRequestMethod("POST"); 
       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 

       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 
       OutputStream outputStream = httpURLConnection.getOutputStream(); 
       BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
       String post_data = URLEncoder.encode("user_name", "UTF-8")+"="+URLEncoder.encode(user_name, "UTF-8"); 
       bufferedWriter.write(post_data); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       outputStream.close(); 

       InputStream inputStream = httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
       String result = null; 
       result = bufferedReader.readLine(); 
       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 
       return result; 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     }else if(type.equals("getProfileImages")){ 
      try { 
       URL url = new URL(image_url); 
       HttpURLConnection httpURLConnection = null; 
       httpURLConnection = (HttpURLConnection)url.openConnection(); 
       httpURLConnection.setRequestMethod("POST"); 
       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 

       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 
       OutputStream outputStream = httpURLConnection.getOutputStream(); 
       BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
       String post_data = URLEncoder.encode("Image", "UTF-8")+"="+URLEncoder.encode("Image", "UTF-8"); 
       bufferedWriter.write(post_data); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       outputStream.close(); 

       InputStream inputStream = httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
       String result = null; 
       result = bufferedReader.readLine(); 
       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 
       return result; 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     dataSendToActivity.sendData(result); 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 
} 
+1

您可以發佈您'AsyncTask'在這裏? – AndiGeeky

+0

檢查您是否收到任何異常,並檢查'sendData()'中'result'的長度。你可能會得到一些'JSONException'或'result'的長度爲0 –

+0

@RaviRupareliya結果裏面有東西,這是我想要的東西。正如你所看到的,我做了一個循環來將字符串添加到數組中。當我Log.d數組中,數組中有3個字符串,但是當它返回到viewpager時,圖像沒有任何東西 –

回答

0

的執行順序是全亂了。在你向圖像數組添加數據時,空圖像數組已經被傳遞給視圖尋呼機適配器,因此圖像數組爲空。

ü繼續做同樣的事情,但不是在的onCreate()設置視圖尋呼機適配器設置適配器ü調用該方法的SendData()之後;

修改這樣的發送數據()方法。

public void sendData(String response) { 
     try { 
      JSONObject jsonObject = new JSONObject(response); 
      JSONArray result = jsonObject.getJSONArray("result"); 

      for (int i = 0 ; i < result.length(); i++) { 
       JSONObject obj = result.getJSONObject(i); 
       String id = obj.getString("image"+i); 
       image.add("http://192.168.12.252/"+id+"/profile.png"); 
      } 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    adapter = new CustomAdapter(login_main.this,image);//set ur image array here 
     viewPager.setAdapter(adapter); 
    } 
+0

感謝您的答案。我曾嘗試過,但ViewPager發瘋了。當我嘗試向第二張圖像的左側滑動時,它總是回到第一張圖像。它似乎像這部分繼續循環,它總是將其設置爲圖像1 –

+0

共享你的視圖尋呼機適配器代碼絕對有一個錯誤在你的適配器.. @ ChongWaiLun –

+0

你是對的!那裏有錯誤導致問題。它正在工作,謝謝! –