gpt4 book ai didi

java - 将微调项目存储在字符串值中

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:37 25 4
gpt4 key购买 nike

我创建了一个连接到远程数据库的应用程序。数据库中的项目通过我的 MainActivity 类中的微调器显示。我想在单独的类(Map.java)和XML页面(map.xml)中显示所选项目,因此我在Map.java中使用此代码来尝试获取所选项目并显示它:

    Spinner mySpinner = (Spinner)findViewById(R.id.spinFood);
String text = mySpinner.getSelectedItem().toString();
EditText e = (EditText) findViewById (R.id.editText1);
e.setText(text);

为了显示此值,我在 map.xml 文件中创建了一个 EditText:

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="text"
android:text="@string/text"
android:id="@+id/editText1"
android:layout_alignBottom="@+id/textView"
android:layout_toRightOf="@+id/textView"
android:layout_alignRight="@+id/imageView"
android:layout_alignEnd="@+id/imageView" />

android:input_type="text"是我创建的字符串值:

<string name="text"> %s </string>

但是每当我打开 map 页面时,我的应用程序就会崩溃。有人可以告诉我哪里出了问题吗?这是我的 MainActivity 和 Map.java 的所有代码

主要 Activity

package com.example.cillin.infoandroidhivespinnermysql;

import java.util.ArrayList;
..

public class MainActivity extends Activity implements OnItemSelectedListener {

private Button btnAddNewCategory;
private TextView txtCategory;
public Spinner spinnerFood;

// array list for spinner adapter
private ArrayList<Category> categoriesList;
ProgressDialog pDialog;

// API urls
// Url to create new category
private String URL_NEW_CATEGORY = "http://192.168.1.4/food_api/new_category.php";
// Url to get all categories
private String URL_CATEGORIES = "http://192.168.1.4/food_api/get_categories.php";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnAddNewCategory = (Button) findViewById(R.id.btnAddNewCategory);
spinnerFood = (Spinner) findViewById(R.id.spinFood);
txtCategory = (TextView) findViewById(R.id.txtCategory);

categoriesList = new ArrayList<Category>();

// spinner item select listener
spinnerFood.setOnItemSelectedListener(this);

// Add new category click event
btnAddNewCategory.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
if (txtCategory.getText().toString().trim().length() > 0) {

// new category name
String newCategory = txtCategory.getText().toString();

// Call Async task to create new category
new AddNewCategory().execute(newCategory);
} else {
Toast.makeText(getApplicationContext(),
"Please enter category name", Toast.LENGTH_SHORT)
.show();
}
}
});

new GetCategories().execute();

}

/**
* Adding spinner data
* */
private void populateSpinner() {
List<String> lables = new ArrayList<String>();

txtCategory.setText("");

for (int i = 0; i < categoriesList.size(); i++) {
lables.add(categoriesList.get(i).getName());
}

// Creating adapter for spinner
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, lables);

// Drop down layout style - list view with radio button
spinnerAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

// attaching data adapter to spinner
spinnerFood.setAdapter(spinnerAdapter);

//spinnerValue = spinnerFood.getSelectedItem().toString();
}

/**
* Async task to get all food categories
* */
private class GetCategories extends AsyncTask<Void, Void, Void> {

@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Fetching food categories..");
pDialog.setCancelable(false);
pDialog.show();

}

@Override
protected Void doInBackground(Void... arg0) {
ServiceHandler jsonParser = new ServiceHandler();
String json = jsonParser.makeServiceCall(URL_CATEGORIES, ServiceHandler.GET);

Log.e("Response: ", "> " + json);

if (json != null) {
try {
JSONObject jsonObj = new JSONObject(json);
if (jsonObj != null) {
JSONArray categories = jsonObj
.getJSONArray("categories");

for (int i = 0; i < categories.length(); i++) {
JSONObject catObj = (JSONObject) categories.get(i);
Category cat = new Category(catObj.getInt("id"),
catObj.getString("name"));
categoriesList.add(cat);
}
}

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

} else {
Log.e("JSON Data", "Didn't receive any data from server!");
}

return null;
}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pDialog.isShowing())
pDialog.dismiss();
populateSpinner();
}

}

/**
* Async task to create a new food category
* */
private class AddNewCategory extends AsyncTask<String, Void, Void> {

boolean isNewCategoryCreated = false;

@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Creating new category..");
pDialog.setCancelable(false);
pDialog.show();

}

@Override
protected Void doInBackground(String... arg) {

String newCategory = arg[0];

// Preparing post params
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", newCategory));

ServiceHandler serviceClient = new ServiceHandler();

String json = serviceClient.makeServiceCall(URL_NEW_CATEGORY,
ServiceHandler.POST, params);

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

if (json != null) {
try {
JSONObject jsonObj = new JSONObject(json);
boolean error = jsonObj.getBoolean("error");
// checking for error node in json
if (!error) {
// new category created successfully
isNewCategoryCreated = true;
} else {
Log.e("Create Category Error: ", "> " + jsonObj.getString("message"));
}

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

} else {
Log.e("JSON Data", "Didn't receive any data from server!");
}

return null;
}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pDialog.isShowing())
pDialog.dismiss();
if (isNewCategoryCreated) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// fetching all categories
new GetCategories().execute();
}
});
}
}

}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(
getApplicationContext(),
parent.getItemAtPosition(position).toString() + " Selected" ,
Toast.LENGTH_LONG).show();

}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
}

}

map .java

package com.example.cillin.infoandroidhivespinnermysql;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;

公共(public)类Map扩展了Activity{

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);


//This page layout is located in the menu XML file
//SetContentView links a Java file, to its XML file for the layout
setContentView(R.layout.map);

/*TextView.setText(spinnerValue);
TextView spinv = (TextView)findViewById(R.id.textView2);
spinv.setText(getspin());
spinv = getspin();*/

Spinner mySpinner = (Spinner)findViewById(R.id.spinFood);
String text = mySpinner.getSelectedItem().toString();
EditText e = (EditText) findViewById (R.id.editText1);
e.setText(text);


Button mainm = (Button)findViewById(R.id.mainmenu);
mainm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//This button is linked to the map page
Intent i = new Intent(Map.this, MainMenu.class);

//Activating the intent
startActivity(i);
}
});
}

}

任何帮助将不胜感激!!

以下是我的 logcat 崩溃时出现的错误:

  E/DatabaseUtils﹕ Writing exception to parcel
java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:14643)
at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2469)
at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:688)
at android.content.ContentProvider$Transport.call(ContentProvider.java:325)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:275)
at android.os.Binder.execTransact(Binder.java:404)


E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.cillin.infoandroidhivespinnermysql, PID: 14691
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.cillin.infoandroidhivespinnermysql/com.example.cillin.infoandroidhivespinnermysql.Map}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
at

android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.cillin.infoandroidhivespinnermysql.Map.onCreate(Map.java:34)
at android.app.Activity.performCreate(Activity.java:5426)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
            at android.app.ActivityThread.access$900(ActivityThread.java:161)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)

最佳答案

我猜您在 Map.class 中遇到了 NullPointerException

Spinner mySpinner = (Spinner)findViewById(R.id.spinFood);
String text = mySpinner.getSelectedItem().toString();
EditText e = (EditText) findViewById (R.id.editText1);
e.setText(text);

您获得对 Spinner 的引用,然后尝试获取所选项目并将该项目转换为字符串。据我所知,您实际上还没有向微调器添加任何项目。我的猜测是,您正在尝试访问微调器中的一个对象,并且由于它不存在,因此返回 null。然后,您尝试调用 null 对象上的方法并获取 NPE。

这只是一个猜测。堆栈跟踪对于尝试诊断此问题非常有帮助。

我认为你出错的地方是你在 MainActivity 中填充了微调器,然后期望能够从不同 Activity 的微调器中选择一个项目。事情不是这样的。 Map.class 将无法引用 MainActivity.class 中的任何内容。您可以尝试将对象从 MainActivity.class 传递到 Map.class 或使用不同的数据传递方法,但尝试从 Map.class 引用 MainAcitivity.class 中的数据是行不通的。

编辑:如果您只想将一个字符串从 MainActivity.class 传递到 Map.class,您可以将该字符串作为“额外”添加到用于启动 Map.class 的 Intent 中。

在您的 MainActivity.class 代码中。选择微调器中的项目后,创建一个 Intent 并使用 putExtra() 方法将字符串设置为额外内容。您将需要提供一个基本上标记额外内容的 key ,以便您可以在接收 Activity 和要发送的字符串中识别它。

Intent intent = new Intent(this, Map.class);
intent.putExtra("KEY_SPINNER_STRING", variableRepresentingString);
startActivity(intent);

在 Map.class Activity 中,在 onCreate() 方法中,您需要接收 Intent ,检查额外内容,然后解压额外内容。然后你就会得到字符串。

onCreate(Bundle savedInstanceState) {
String spinnerString;
if (getIntent() != null && getIntent().getExtras() != null) {
Bundle bundle = getIntent().getExtras();
if (bundle.getString("KEY_SPINNER_STRING") != null) {
spinnerString = bundle.getString("KEY_SPINNER_STRING");
}
}
}

如果一切都正确完成,字符串将从 MainActivity.class 传递并由 Map.class 接收

关于java - 将微调项目存储在字符串值中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com