2013-03-22 2 views
0

그래서 난 반환 된 JSON 배열에서 이미지를 엇갈리게 gridview로로드하려고합니다. 나는 예제를 통해 배열에 직접 퍼팅 링크를 테스트했으며 완벽하게 작동하지만 일단 json 데이터를 사용하려고하면 오류가 발생합니다. (네트워크 및 저장소 오류 모두) 내 매니페스트에 필요한 모든 허용 항목이 있습니다 (인터넷, 내부 및 외부 저장 장치)안드로이드 지연로드 이미지 JSON에서 gridview

여기 내 코드가 있습니다. 누군가 제게 무슨 일이 일어 났는지 알려주세요. 감사!!

package com.example.staggeredgridviewdemo; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 

import com.origamilabs.library.views.StaggeredGridView; 

/** 
* 
* This will not work so great since the heights of the imageViews are 
* calculated on the iamgeLoader callback ruining the offsets. To fix this try 
* to get the (intrinsic) image width and height and set the views height 
* manually. I will look into a fix once I find extra time. 
* 
* @author Maurycy Wojtowicz 
* 
*/ 
public class MainActivity extends Activity { 

    /* 
    * Images are taken by Romain Guy ! He's a great photographer as well as a 
    * great programmer. http://www.flickr.com/photos/romainguy 
    */ 

    private String urls[]; 
    String location = "http://snapoodle.com/APIS/android/feed.php"; 
    static final String TAG_ITEMS = "print"; 

    /* 
    * private String urls[] = { 
    * "http://farm7.staticflickr.com/6101/6853156632_6374976d38_c.jpg", 
    * "http://farm8.staticflickr.com/7084/6885444694_6272874cfc.jpg" }; 
    */ 
    /** 
    * This will not work so great since the heights of the imageViews are 
    * calculated on the iamgeLoader callback ruining the offsets. To fix this 
    * try to get the (intrinsic) image width and height and set the views 
    * height manually. I will look into a fix once I find extra time. 
    */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     StaggeredGridView gridView = (StaggeredGridView) this 
       .findViewById(R.id.staggeredGridView1); 


     getImages get= (getImages) new getImages(); 
     get.execute(location); 

     //int margin = getResources().getDimensionPixelSize(R.dimen.margin); 

     //gridView.setItemMargin(margin); // set the GridView margin 

     //gridView.setPadding(margin, 0, margin, 0); // have the margin on the 
                // sides as well 

     StaggeredAdapter adapter = new StaggeredAdapter(MainActivity.this, 
       R.id.imageView1, urls); 

     gridView.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 
    } 

    class getImages extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      JSONObject json = JSONfunctions 
        .getJSONfromURL(location); 

      try { 
       JSONArray jarray; 
       jarray = json.getJSONArray(TAG_ITEMS); 
       urls = new String[jarray.length()]; 

       for (int i = 0; i < jarray.length(); i++) { 
        JSONObject gridImages = jarray.getJSONObject(i); 
        urls[i] = gridImages.getString("saved_location"); 
       } 

      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


      return null; 
     } 

    } 

} 

로그 캣

03-22 14:57:59.276: D/AndroidRuntime(1183): Shutting down VM 
    03-22 14:57:59.276: W/dalvikvm(1183): threadid=1: thread exiting with uncaught exception (group=0x4111f930) 
    03-22 14:57:59.286: E/AndroidRuntime(1183): FATAL EXCEPTION: main 
    03-22 14:57:59.286: E/AndroidRuntime(1183): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.staggeredgridviewdemo/com.example.staggeredgridviewdemo.MainActivity}: java.lang.NullPointerException: storage == null 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.os.Looper.loop(Looper.java:137) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at java.lang.reflect.Method.invokeNative(Native Method) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at java.lang.reflect.Method.invoke(Method.java:511) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at dalvik.system.NativeStart.main(Native Method) 
    03-22 14:57:59.286: E/AndroidRuntime(1183): Caused by: java.lang.NullPointerException: storage == null 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at java.util.Arrays$ArrayList.<init>(Arrays.java:38) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at java.util.Arrays.asList(Arrays.java:154) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:128) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at com.example.staggeredgridviewdemo.StaggeredAdapter.<init>(StaggeredAdapter.java:20) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at com.example.staggeredgridviewdemo.MainActivity.onCreate(MainActivity.java:89) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.app.Activity.performCreate(Activity.java:5104) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
    03-22 14:57:59.286: E/AndroidRuntime(1183):  ... 11 more 
    03-22 14:57:59.316: D/dalvikvm(1183): GC_CONCURRENT freed 176K, 3% free 8878K/9084K, paused 3ms+1ms, total 19ms 
+0

PLZ 당신이지고 어떤 오류가 당신의 오류 –

+0

질문 로그 캣 결과를 추가? Logcat 출력 pls – Priya

+0

를 게시 –

답변

0

내가 조금 바보였다,하지만 난 onPostExecute 내 엇갈린 그리드 뷰를 이동 백그라운드에서 할 일에서 URL을 반환하여 그것을 해결

+0

을 해결했지만 해결되지 않은 경우 다음을 확인하십시오. http://stackoverflow.com/questions/23931593/lazy-loading-images-from-json-not-downloaded-in-sd-card – Sophie

0

이 줄 03-22 14:57:59.286: E/AndroidRuntime(1183): at com.example.staggeredgridviewdemo.MainActivity.onCreate(MainActivity.java:89)MainActivity의 라인 89에 약간의 문제가 말한다. 여기에서 어댑터를 작성합니다. 자세히 살펴보면 null 항목 목록이있는 어댑터를 만들려고합니다. urls은 아직 초기화되지 않았습니다.

AsyncTask 다른 스레드에서 실행되므로 doInBackground (예 : urls = new String[jarray.length()];)에서 발생하는 모든 사항이 다른 스레드에 있습니다. 이 경우 어댑터를 만드는 데 사용 된 후 urls 배열이 초기화된다는 의미입니다.

이렇게하려면 활동을 시작하기 전에 배열을 초기화 할 수 있습니다. 현재 크기가 알지 못하는 경우 다른 어댑터 (예 : ListAdapter)를 사용하여 null이 아닌 목록으로 초기화 한 다음 작업에서이 목록을 채우고 작업이 완료된 후 notifyDataSetChanged으로 전화 할 수 있습니다.

+0

당신이 나에게 작은 예제를 줄 수 있습니까? 감사. – Tunji

+0

@ stan0 안녕하세요,이 자습서를 따르고 있습니다. 다음을 확인하십시오. http://stackoverflow.com/questions/23931593/lazy-loading-images-from-json-not-downloaded-in-sd-card – Sophie

0

데이터 피드 http://snapoodle.com/APIS/android/feed.php을 확인하십시오. 요청에서 반환 된 데이터가 없습니다.

{ "인쇄": []}

+0

그것은 POST를 사용하고 GET을 사용하지 않기 때문입니다 – Tunji

+0

POST로 위의 응답을 받았습니다. – CjD

2
StaggeredAdapter adapter = new StaggeredAdapter(MainActivity.this, 
       R.id.imageView1, urls); 

     gridView.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 

이 당신을 도울 것입니다 AsyncTask

희망에 onPostExecute이 위의 코드를 추가합니다.

+0

@ AnmolSawant96Kuli 안녕하세요, 다음을 확인하십시오. http://stackoverflow.com/questions/23931593/lazy-loading-images-from-json-not- 다운로드 한 SD 카드 – Sophie

관련 문제