java - 空指针异常 : uriString

标签 java android json android-activity

我在尝试加载“Activity 单个项目” Activity 时收到意外错误。简而言之,此 Activity 旨在将 JSON 数据填充到应用程序中。

下面是收到的 logcat 消息:

08-06 21:49:11.711: E/AndroidRuntime(3006): FATAL EXCEPTION: main
08-06 21:49:11.711: E/AndroidRuntime(3006): Process: com.dooba.beta, PID: 3006
08-06 21:49:11.711: E/AndroidRuntime(3006): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dooba.beta/com.dooba.beta.EventSingleItemActivity}: java.lang.NullPointerException: uriString
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.os.Handler.dispatchMessage(Handler.java:102)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.os.Looper.loop(Looper.java:136)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.app.ActivityThread.main(ActivityThread.java:5017)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at java.lang.reflect.Method.invokeNative(Native Method)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at java.lang.reflect.Method.invoke(Method.java:515)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at dalvik.system.NativeStart.main(Native Method)
08-06 21:49:11.711: E/AndroidRuntime(3006): Caused by: java.lang.NullPointerException: uriString
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.net.Uri$StringUri.<init>(Uri.java:467)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.net.Uri$StringUri.<init>(Uri.java:457)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.net.Uri.parse(Uri.java:429)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at com.dooba.beta.EventSingleItemActivity.onCreate(EventSingleItemActivity.java:26)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.app.Activity.performCreate(Activity.java:5231)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-06 21:49:11.711: E/AndroidRuntime(3006):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
08-06 21:49:11.711: E/AndroidRuntime(3006):     ... 11 more

下面是事件单项 Activity 代码

public class EventSingleItemActivity extends Activity {

    // Declare Variables
    String list_item_name;
    String list_item_description;
    String list_item_price;
    String single_list_item_description;




    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_events_single_item);

        Intent i = getIntent();
        Uri urisingle = Uri.parse(i.getStringExtra("single_list_item_bac"));
        list_item_name = i.getStringExtra("list_item_name");
        single_list_item_description = i.getStringExtra("single_list_item_description");
        list_item_price = i.getStringExtra("list_item_price");

        TextView txtname = (TextView) findViewById(R.id.name);
        TextView txtsdescription = (TextView) findViewById(R.id.sdescription);
        TextView txtprice = (TextView) findViewById(R.id.price);

        // Set results to the TextViews
        txtname.setText(list_item_name);
        txtsdescription.setText(single_list_item_description);
        txtprice.setText(list_item_price);


    }
}

以下是主要 Activity 页面

public class EventsActivity extends Activity{

    private static final String URL_WEB_SERVICE = "http://dooba.ca/analytics/ed.php";
    private GridView gv;
    private ArrayList<Events_List> container;
    private ArrayList<Events_List> items;
    public Uri list_item_bac;
    public Uri single_list_item_bac;
    public String list_item_name;
    public String list_item_description;
    public String single_list_item_description;
    public String list_item_price;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.events_list_layout);
        gv = (GridView) findViewById(R.id.gridview);
        container = new ArrayList<Events_List>();
        //download JSON
        listDownload();


        GridView s = (GridView) findViewById(R.id.gridview);
        s.setOnItemClickListener(new OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(EventsActivity.this,EventSingleItemActivity.class);
                intent.putExtra("single_list_item_bac",container.get(position).getSingle_list_item_bac());
                intent.putExtra("list_item_name", container.get(position).getList_item_title());
                intent.putExtra("single_list_item_description", container.get(position).getSingle_list_item_description());
                intent.putExtra("list_item_price",container.get(position).getList_item_price());

                startActivity(intent); //start Activity
            }
        });
    }
    public void listDownload(){
        RequestQueue volley = Volley.newRequestQueue(this);
        JsonObjectRequest json = new JsonObjectRequest(Method.GET, URL_WEB_SERVICE, null, ResponseListener(), ErrorListener());
        volley.add(json);
    }

    private Response.Listener<JSONObject> ResponseListener() {
        return new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    //your JSON Array
                    JSONArray array = response.getJSONArray("list_item");
                    for(int i = 0; i < array.length(); i++){
                        container.add(convertirAnuncio(array.getJSONObject(i)));
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                gv.setAdapter(new AdapterEvents(getApplicationContext(),container));
                }
            };
        };


    private Response.ErrorListener ErrorListener() {
        return new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) { }
        };
    }

    //object JSON
    private final Events_List convertirAnuncio(JSONObject obj) throws JSONException {
        long id = obj.getLong("id"); //id 
        String list_item_name = obj.getString("list_item_name"); 
        String list_item_description = obj.getString("list_item_description");
        String list_item_price = obj.getString("list_item_price");
        String single_list_item_description = obj.getString("single_list_item_description");
        Uri uri = Uri.parse(obj.getString("list_item_bac"));
        return new Events_List(id,single_list_item_description,single_list_item_bac, list_item_name,list_item_description,list_item_price, uri);
    }
}

下面是事件列表代码

public class Events_List {
public long id;
public String list_item_title;
public String list_item_price;
public Uri single_list_item_bac;
public String list_item_description;
public String single_list_item_description;

public Uri url;

public Events_List(long id, String single_list_item_description, Uri single_list_item_bac, String list_item_title, String list_item_description, String list_item_price, Uri url){
    this.id = id;
    this.list_item_title = list_item_title;
    this.list_item_description = list_item_description;
    this.single_list_item_description = single_list_item_description;
    this.list_item_price = list_item_price;
    this.single_list_item_bac = single_list_item_bac;
    this.url = url;
}

public String getList_item_title()
{
    return this.list_item_title;
}

public Uri getSingle_list_item_bac()
{
    return this.single_list_item_bac;
}

public String getList_item_price()
{
    return this.list_item_price;
}

public String getList_item_description()
{
    return this.list_item_description;
}

public String getSingle_list_item_description()
{
    return this.single_list_item_description;
}


}

任何帮助将不胜感激。

最佳答案

像这样进行空检查以避免异常:

 Uri urisingle = Uri.parse(i.getStringExtra("single_list_item_bac"));

if(urisingle!=null){
   doSomething()....
 }

关于java - 空指针异常 : uriString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25171207/

相关文章:

java - 嵌套对象空字段的 Spring 表单绑定(bind)问题

android - 打开 SearchView 时隐藏应用程序图标

Android:在 Gradle 构建脚本中使用 packageNameSuffix 时,SearchableInfo 为 null

json - 在bash中用awk/sed解析json得到键值对

javascript - 将文本框输入转换为字符串

java - 使用数组创建具有给定值的直方图帮助请:(

java - 取消 JAVA JSP 上的预订

Android Studio——将 Gradle 与文件的 'traditional' 排序一起使用

javascript - 向 JSON 数据集添加值

java - 运行在不同计算机上的 Java 程序的内存消耗