Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用onItemClick将特定值传递给新活动_Android_Json_Listview - Fatal编程技术网

Android 如何使用onItemClick将特定值传递给新活动

Android 如何使用onItemClick将特定值传递给新活动,android,json,listview,Android,Json,Listview,我使用myIntent.putExtra(“name”),尝试了各种不同的方法;无法检索我在列表视图中单击的项目的“标记名称”。它打开新活动时不会出现问题,但传递的值为null。第二个活动与此活动几乎相同,因此我也不会将其放置。唯一的区别是我声明了多少个json节点,以及我想使用一个基于我从主活动中获取的类别名称的开关。因此,根据单击的内容,json将为数据使用不同的URL 我需要帮助计算如何传递按下的类别名称(TAG_name) 编辑:快速注释-下面的代码可以完美地使用url中提供的数据显示列

我使用myIntent.putExtra(“name”),尝试了各种不同的方法;无法检索我在列表视图中单击的项目的“标记名称”。它打开新活动时不会出现问题,但传递的值为null。第二个活动与此活动几乎相同,因此我也不会将其放置。唯一的区别是我声明了多少个json节点,以及我想使用一个基于我从主活动中获取的类别名称的开关。因此,根据单击的内容,json将为数据使用不同的URL

我需要帮助计算如何传递按下的类别名称(TAG_name)

编辑:快速注释-下面的代码可以完美地使用url中提供的数据显示列表视图。另外,当点击并没有使用传递的数据(并且总是空的),而是使用一个静态url时,第二个活动的代码也像一个符咒一样工作。我唯一的问题是传递的变量

 public class Main_activity extends ListActivity {


  //URL to get JSON Array
  private static String url = "http://localhost/category";
  //JSON Node Names
  private static final String CAT ="categories";
  private static final String TAG_NAME = "name"; //copy-paste to other same static string variables
  JSONArray categories  = null;
  private ArrayList<HashMap<String, String>> oslist;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        oslist = new ArrayList<HashMap<String, String>>();
        new JSONParse().execute();


    ListView lv = getListView();
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
            Intent myIntent = new Intent(view.getContext(), happy_products.class); 
            startActivityForResult(myIntent,0);
            // display happy_products.class     
        }
       });
     }


    private class JSONParse extends AsyncTask<Void, Void, Void> {
       private ProgressDialog pDialog;
      @Override
      protected void onPreExecute() {
          super.onPreExecute();
          // Showing progress dialog
          pDialog = new ProgressDialog(Main_happy.this);
          pDialog.setMessage("Please wait...");
          pDialog.setCancelable(false);
          pDialog.show();
      }
      @Override
        protected Void doInBackground(Void... args) {
        // Creating service handler class instance
          ServiceHandler sh = new ServiceHandler();

          // Making a request to url and getting response
          String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

          Log.d("Response: ", "> " + jsonStr);

          if (jsonStr != null) {
              try {
        // Getting JSON from URL
             JSONObject jsonObj = new JSONObject(jsonStr);
              categories = jsonObj.getJSONArray(CAT);
            for(int i = 0; i < categories.length(); i++){
            JSONObject c = categories.getJSONObject(i);

            // Storing  JSON item in a Variable
            String id = c.getString(TAG_ID);
            String name = c.getString(TAG_NAME);
            // Adding value HashMap key => value
            HashMap<String, String> map = new HashMap<String, String>();
            map.put(TAG_NAME, name);
            oslist.add(map);
              }
             } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }

        return null;
     }
      @Override
      protected void onPostExecute(Void r) {
          super.onPostExecute(r);
          // Dismiss the progress dialog
          if (pDialog.isShowing())
              pDialog.dismiss();
          /**
           * Updating parsed JSON data into ListView
           * */
          ListAdapter adapter = new SimpleAdapter(Main_happy.this, oslist,
                  R.layout.category_list,
                  new String[] {TAG_ID, TAG_NAME,TAG_UPDATE}, new int[] {R.id.id,R.id.name, R.id.lastUpdated});
          setListAdapter(adapter);
      }

    }
}
公共类主活动扩展了ListActivity{
//获取JSON数组的URL
专用静态字符串url=”http://localhost/category";
//JSON节点名称
私有静态最终字符串CAT=“categories”;
私有静态最终字符串标记\u NAME=“NAME”;//复制粘贴到其他相同的静态字符串变量
JSONArray categories=null;
私人ArrayList oslist;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
oslist=newarraylist();
新建JSONParse().execute();
ListView lv=getListView();
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、int位置、长id){
Intent myIntent=newintent(view.getContext(),happy_products.class);
startActivityForResult(myIntent,0);
//显示happy_products.class
}
});
}
私有类JSONParse扩展了异步任务{
私人对话;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//显示进度对话框
pDialog=newprogressdialog(Main\u happy.this);
setMessage(“请稍候…”);
pDialog.setCancelable(假);
pDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…args){
//创建服务处理程序类实例
ServiceHandler sh=新的ServiceHandler();
//向url发出请求并获得响应
字符串jsonStr=sh.makeServiceCall(url,ServiceHandler.GET);
Log.d(“响应:”、“>”+jsonStr);
if(jsonStr!=null){
试一试{
//从URL获取JSON
JSONObject jsonObj=新的JSONObject(jsonStr);
categories=jsonObj.getJSONArray(CAT);
对于(int i=0;ivalue
HashMap=newHashMap();
地图放置(标签名称、名称);
添加(地图);
}
}捕获(JSONException e){
e、 printStackTrace();
}
}否则{
Log.e(“ServiceHandler”,“无法从url获取任何数据”);
}
返回null;
}
@凌驾
受保护的void onPostExecute(void r){
super.onPostExecute(r);
//关闭进度对话框
if(pDialog.isShowing())
pDialog.disclose();
/**
*将解析的JSON数据更新到ListView中
* */
ListAdapter=new SimpleAdapter(Main_.this,oslist,
R.布局。类别列表,
新字符串[]{TAG_ID,TAG_NAME,TAG_UPDATE},新int[]{R.ID.ID,R.ID.NAME,R.ID.lastUpdated});
setListAdapter(适配器);
}
}
}
根据第一条评论进行编辑:

可能是我用的钥匙不对。错误与返回的null值有关,因此doInBackground无法获取数据,因为url为null。 "

HashMap=(HashMap)lv.getItemAtPosition(位置);
字符串值=map.get(TAG_NAME);
"

06-11 13:10:24.191:E/AndroidRuntime(2173):java.lang.RuntimeException:执行doInBackground()时出错
06-11 13:10:24.191:E/AndroidRuntime(2173):在android.os.AsyncTask$3.done(AsyncTask.java:300)
06-11 13:10:24.191:E/AndroidRuntime(2173):在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
06-11 13:10:24.191:E/AndroidRuntime(2173):位于java.util.concurrent.FutureTask.setException(FutureTask.java:222)
06-11 13:10:24.191:E/AndroidRuntime(2173):在java.util.concurrent.FutureTask.run(FutureTask.java:242)
06-11 13:10:24.191:E/AndroidRuntime(2173):在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-11 13:10:24.191:E/AndroidRuntime(2173):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-11 13:10:24.191:E/AndroidRuntime(2173):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-11 13:10:24.191:E/AndroidRuntime(2173):在java.lang.Thread.run(Thread.java:841)
06-11 13:10:24.191:E/AndroidRuntime(2173):由以下原因引起:java.lang.NullPointerException
06-11 13:10:24.191:E/AndroidRuntime(2173):位于java.net.URI.parseURI(URI.java:353)
06-11 13:10:24.191:E/AndroidRuntime(2173):位于java.net.URI(URI.java:204)
06-11 13:10:24.191:E/AndroidRuntime(2173):在java.net.URI.create(URI.java:725)
06-11 13:10:24.191:E/AndroidRun
HashMap<String,String> map =(HashMap<String,String>)lv.getItemAtPosition(position);
            String value = map.get(TAG_NAME);
 06-11 13:10:24.191: E/AndroidRuntime(2173): java.lang.RuntimeException: An error occured while executing doInBackground()
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.lang.Thread.run(Thread.java:841)
    06-11 13:10:24.191: E/AndroidRuntime(2173): Caused by: java.lang.NullPointerException
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.net.URI.parseURI(URI.java:353)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.net.URI.<init>(URI.java:204)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.net.URI.create(URI.java:725)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at apphap.ServiceHandler.makeServiceCall(ServiceHandler.java:68)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at apphap.ServiceHandler.makeServiceCall(ServiceHandler.java:34)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at apphap._products$JSONParse.doInBackground(_products.java:76)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at apphap._products$JSONParse.doInBackground(_products.java:1)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
    06-11 13:10:24.191: E/AndroidRuntime(2173):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)