2013-06-01 1 views
0

OnClickListener에서 다른 활동을 호출하려고하는데 NullPointerException이 발생했습니다. https://stackoverflow.com/a/7325248/1291619에 제공된 제안을 사용하여 데이터를 다른 활동으로 전달했습니다.NullPointerException - 비 활동 클래스에서 활동으로 데이터를 보낼 때 (의도를 통해)

이 클래스는 목록에서 수신 대기하고 항목을 클릭 할 때 선택한 URI로 VCardActivity.java를 시작하기위한 클래스입니다. 그것은 의도와 함께 URI를 보냅니다

public class StaffListListener implements OnItemClickListener { 

    ArrayList<String> items; 
    Activity activity; 

    public StaffListListener(ArrayList<String> items, Activity activity) { 
     this.items = items; 
     this.activity = activity; 
    } 

    /** 
    * Send user to view with contact details 
    */ 
    public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { 

     //items.get(pos) returns the UPI needed. Append to http://www.cs.auckland.ac.nz/our_staff/vcard.php?upi=  
     Uri.Builder b = Uri.parse("http://www.cs.auckland.ac.nz/our_staff/vcard.php").buildUpon(); 
     b.appendQueryParameter("upi", items.get(pos)); 
     Uri uri = b.build(); 
     Log.d("URL of staff", uri.toString()); 

     Intent i = new Intent(activity.getApplicationContext(), VCardActivity.class); 
     i.putExtra("URI",uri); 
     activity.startActivity(i);  
    } 
} 

이 클래스는 URI와 함께 의도를 수신하고 데이터를 분석하고 표시하기위한 것입니다.

public class VCardActivity extends ListActivity { 
    private VCardActivity local; 
    private String uri; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_vcard); 
     local = this; 

     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      uri = extras.getString("URI"); 
     } 

     try { 
      URL url = new URL(uri.toString()); 
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

      InputStream stream = urlConnection.getInputStream(); 
      StringBuffer fileContent = new StringBuffer(""); 
      int ch; 
      while((ch = stream.read()) != -1){ 
       fileContent.append((char)ch); 
       } 
      String data = new String(fileContent); 
      Log.i("TAG", "data: " + data); 
      } 
     catch (IOException e) { 
      e.printStackTrace(); 
      }   
    } 
} 

내 예외 : 내가 잘못거야 어디 사람이 말해 줄 수 있다면

06-01 10:06:13.293: E/AndroidRuntime(903): FATAL EXCEPTION: main 
06-01 10:06:13.293: E/AndroidRuntime(903): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lim.assignment/com.lim.json.VCardActivity}: java.lang.NullPointerException 
06-01 10:06:13.293: E/AndroidRuntime(903): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 

될 것입니다 단순히 자리 표시 자 로그인을 사용하여 서식 아직 분석 데이터를 정리하지 않은 매우 감사.

+0

등 얻을 데이터는 URI에 널 값을 가질 수있다. –

+0

나는 직접 StaffListListener에 uri를 테스트했다. 문제는 VCardActivity를 호출하거나 어쩌면 URI가 의도를 통과하는지 여부입니다. – misaochan

+0

의도로 uri.toString()을 전달 –

답변

1

Intent i = new Intent(getApplicationContext(), VCardActivity.class); 
     i.putExtra("URI",uri.toString()); 
     startActivity(i); 

같은 목적을 통해 데이터를 전달하고

Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      uri = extras.getString("URI"); 
     } 
+0

감사! 문제가 Uri 객체를 문자열 표현 대신 intent를 통해 전달하는 것처럼 보입니까? – misaochan

관련 문제