gpt4 book ai didi

java - 自动从数据库中获取URL

转载 作者:可可西里 更新时间:2023-11-01 08:50:13 25 4
gpt4 key购买 nike

当我点击按钮 btnDelete 时,我试图自动从我的在线数据库表中获取一个 URL。问题是它从数据库返回正确的值,但是当尝试将它与:

Uri uri = Uri.parse(TAG_url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

它说“不幸的是,对数据库的访问已停止。”

当我从 TAG_url 创建一个 Log.d() 时,它只返回“URL”,但是当我使用

txtDesc.setText(product.getString(TAG_url));

它正确显示来自数据库的链接。

03-14 11:50:18.169: E/Trace(5227): error opening trace file: No such file or directory (2)
03-14 11:50:31.499: E/AndroidRuntime(5227): FATAL EXCEPTION: main
03-14 11:50:31.499: E/AndroidRuntime(5227): java.lang.NullPointerException: uriString
03-14 11:50:31.499: E/AndroidRuntime(5227): at android.net.Uri$StringUri.<init>(Uri.java:464)
03-14 11:50:31.499: E/AndroidRuntime(5227): at android.net.Uri$StringUri.<init>(Uri.java:454)
03-14 11:50:31.499: E/AndroidRuntime(5227): at android.net.Uri.parse(Uri.java:426)
03-14 11:50:31.499: E/AndroidRuntime(5227): at com.example.androidhive.EditProductActivity1$2.onClick(EditProductActivity1.java:106)
03-14 11:50:31.499: E/AndroidRuntime(5227): at android.view.View.performClick(View.java:4084)
03-14 11:50:31.499: E/AndroidRuntime(5227): at android.view.View$PerformClick.run(View.java:16966)
03-14 11:50:31.499: E/AndroidRuntime(5227): at android.os.Handler.handleCallback(Handler.java:615)
03-14 11:50:31.499: E/AndroidRuntime(5227): at android.os.Handler.dispatchMessage(Handler.java:92)
03-14 11:50:31.499: E/AndroidRuntime(5227): at android.os.Looper.loop(Looper.java:137)
03-14 11:50:31.499: E/AndroidRuntime(5227): at android.app.ActivityThread.main(ActivityThread.java:4745)
03-14 11:50:31.499: E/AndroidRuntime(5227): at java.lang.reflect.Method.invokeNative(Native Method)
03-14 11:50:31.499: E/AndroidRuntime(5227): at java.lang.reflect.Method.invoke(Method.java:511)
03-14 11:50:31.499: E/AndroidRuntime(5227): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-14 11:50:31.499: E/AndroidRuntime(5227): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-14 11:50:31.499: E/AndroidRuntime(5227): at dalvik.system.NativeStart.main(Native Method)
03-14 11:50:44.299: E/Trace(5251): error opening trace file: No such file or directory (2)

有人能帮帮我吗?

package com.example.androidhive;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class EditProductActivity extends Activity {

EditText txtName;
EditText txtPrice;
EditText txtDesc;
EditText txtimg;
EditText txtCreatedAt;
Button btnSave;
Button btnDelete;
Button btnvideo;

String pid;
String url;

// Progress Dialog
private ProgressDialog pDialog;

// JSON parser class
JSONParser jsonParser = new JSONParser();

// single product url
private static final String url_product_detials = "http://10.0.2.2/android_connect/get_product_details.php";

// url to update product
private static final String url_update_product = "http://10.0.2.2/android_connect/update_product.php";

// url to delete product
private static final String url_delete_product = "http://10.0.2.2/android_connect/delete_product.php";

// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCT = "product";
private static final String TAG_PID = "pid";
private static final String TAG_NAME = "name";
private static final String TAG_PRICE = "price";
private static final String TAG_DESCRIPTION = "description";
private static final String TAG_img = "img";
private static final String TAG_url = "url";

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

// save button
btnSave = (Button) findViewById(R.id.btnSave);
btnDelete = (Button) findViewById(R.id.btnDelete);

// getting product details from intent
Intent i = getIntent();

// getting product id (pid) from intent
pid = i.getStringExtra(TAG_PID);

// Getting complete product details in background thread
new GetProductDetails().execute();

// save button click event
btnSave.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// starting background task to update product
new SaveProductDetails().execute();
}
});

// Delete button click event
btnDelete.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
// deleting product in background thread
Log.v(TAG_url, "index=");
Uri uri = Uri.parse(TAG_url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

}
});
}

/**
* Background Async Task to Get complete product details
* */
class GetProductDetails extends AsyncTask<String, String, String> {

/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditProductActivity.this);
pDialog.setMessage("Loading movies details. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}

/**
* Getting product details in background thread
* */
protected String doInBackground(String... params) {
// updating UI from Background Thread
runOnUiThread(new Runnable() {

public void run() {
// Check for success tag
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("pid", pid));

// getting product details by making HTTP request
// Note that product details url will use GET request
JSONObject json = jsonParser.makeHttpRequest(
url_product_detials, "GET", params);

// check your log for json response
Log.d("Single Product Details", json.toString());

// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully received product details
JSONArray productObj = json
.getJSONArray(TAG_PRODUCT); // JSON Array

// get first product object from JSON Array
JSONObject product = productObj.getJSONObject(0);

// product with this pid found
// Edit Text
url = TAG_url;
Log.v(url, "index=");
txtName = (EditText) findViewById(R.id.inputName);
txtPrice = (EditText) findViewById(R.id.inputPrice);
txtDesc = (EditText) findViewById(R.id.inputDesc);
// txtimg = (EditText) findViewById(R.id.inputimg);

// display product data in EditText
txtName.setText(product.getString(TAG_NAME));
txtPrice.setText(product.getString(TAG_PRICE));
txtDesc.setText(product.getString(TAG_url));
txtimg.setText(product.getString(TAG_img));
} else {
// product with pid not found
}
} catch (JSONException e) {
e.printStackTrace();
}
}

private String getText(String string) {
// TODO Auto-generated method stub
return null;
}
});

return null;
}

/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once got all details
pDialog.dismiss();
}
}

/**
* Background Async Task to Save product Details
* */
class SaveProductDetails extends AsyncTask<String, String, String> {

/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditProductActivity.this);
pDialog.setMessage("Saving product ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}

/**
* Saving product
* */
protected String doInBackground(String... args) {
// getting updated data from EditTexts
String name = txtName.getText().toString();
String price = txtPrice.getText().toString();
String description = txtDesc.getText().toString();
String img = txtimg.getText().toString();

// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(TAG_PID, pid));
params.add(new BasicNameValuePair(TAG_NAME, name));
params.add(new BasicNameValuePair(TAG_PRICE, price));
params.add(new BasicNameValuePair(TAG_DESCRIPTION, description));
params.add(new BasicNameValuePair(TAG_img, img));
params.add(new BasicNameValuePair(TAG_url, url));

// sending modified data through http request
// Notice that update product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_update_product,
"POST", params);

// check json success tag
try {
int success = json.getInt(TAG_SUCCESS);

if (success == 1) {
// successfully updated
Intent i = getIntent();
// send result code 100 to notify about product update
setResult(100, i);
finish();
} else {
// failed to update product
}
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once product uupdated
pDialog.dismiss();
}
}
}

最佳答案

在我看来,var TAG_url 旨在仅用作描述符,而不是用作可变对象。首先,您有: private static final String TAG_url = "url"; 定义为节点名称。将其用于 txtDesc.setText(product.getString(TAG_url)); 是可行的,因为您正在检索与节点“url”关联的数据(TAG_url 包含的内容).在这种情况下,数据不在 TAG_url var 中,而是使用 TAG_url 作为查找数据的键。

任何对 TAG_url 的日志引用都将返回其内容:url。出于同样的原因,使用 TAG_url 的解析调用也将使用它的内容。因此,Uri uri = Uri.parse(TAG_url); 实际上是在调用 Uri uri = Uri.parse("url"); - 所以是错误。

您应该将解析调用中的 TAG_url 替换为包含您打算调用的实际 url 的 var。在你的数据库调用期间,你应该将该 url 存储在一个单独的 var 中,然后解析它。

编辑:

在不知道您的 JSON 或其他数据的结构的情况下,我无法确定。但作为示例,我们假设通过调用 product.getString(TAG_url) 从数据库返回的数据是您要发送到解析器的数据。 (我假设因为你提到当通过 txtDesc.setText(product.getString(TAG_url)); 调用时,数据已正确设置到 TextView txtDesc。)

鉴于此,您可以在类的顶部创建一个字段 String incomingURL;,并分配数据库调用的结果,如 incomingURL = product.getString(TAG_url);。然后,您可以使用新字段设置 TextView,例如 txtDesc.setText(incomingURL);

然后,使用该变量进行解析:Uri uri = Uri.parse(incomingURL); 这将从数据库调用中获取数据,并将其放入解析器中。请记住,如果按钮在数据库调用完成之前可点击,则需要检查 incomingURL 是否为 null。

关于java - 自动从数据库中获取URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15397476/

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