在最喜欢的网站应用程序上工作
Posted
技术标签:
【中文标题】在最喜欢的网站应用程序上工作【英文标题】:Working On A Favorite Websites App 【发布时间】:2017-03-09 10:39:03 【问题描述】:编辑:自从我收到对该主题的回复以来,我已经对此进行了一些更新。这是新线程:
我一直在制作一个 android 应用程序,您可以在其中保存自己喜欢的网站。到目前为止,这是我在“MainActivity.java”文件中得到的代码:
package cory.assignment.favoritewebsitesapp;
import java.util.ArrayList;
import java.util.Collections;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
public class MainActivity extends ListActivity
private static final String SEARCHES = "searches";
private EditText queryEditText;
private EditText tagEditText;
private SharedPreferences savedSearches;
private ArrayList<String> tags;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queryEditText = (EditText) findViewById(R.id.queryEditText);
tagEditText = (EditText) findViewById(R.id.tagEditText);
savedSearches = getSharedPreferences(SEARCHES, MODE_PRIVATE);
tags = new ArrayList<String>(savedSearches.getAll().keySet());
Collections.sort(tags, String.CASE_INSENSITIVE_ORDER);
adapter = new ArrayAdapter<String>(this, R.layout.list_item, tags);
setListAdapter(adapter);
ImageButton saveButton = (ImageButton) findViewById(R.id.saveButton);
saveButton.setOnClickListener(saveButtonListener);
getListView().setOnItemClickListener(itemClickListener);
getListView().setOnItemLongClickListener(itemLongClickListener);
public OnClickListener saveButtonListener = new OnClickListener()
@Override
public void onClick(View v)
if (queryEditText.getText().length() > 0 && tagEditText.getText().length() > 0)
addTaggedSearch(queryEditText.getText().toString(), tagEditText.getText().toString());
queryEditText.setText("");
tagEditText.setText("");
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(tagEditText.getWindowToken(), 0);
else
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage(R.string.missingMessage);
builder.setPositiveButton(R.string.OK, null);
AlertDialog errorDialog = builder.create();
errorDialog.show();
;
private void addTaggedSearch(String query, String tag)
SharedPreferences.Editor preferencesEditor = savedSearches.edit();
preferencesEditor.putString(tag, query);
preferencesEditor.apply();
if (!tags.contains(tags))
tags.add(tag);
Collections.sort(tags, String.CASE_INSENSITIVE_ORDER);
adapter.notifyDataSetChanged();
OnItemClickListener itemClickListener = new OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
String tag = ((TextView) view).getText().toString();
String urlString = getString(R.string.searchURL) + Uri.encode(savedSearches.getString(tag, ""), "UTF-8");
Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString));
startActivity(webIntent);
;
OnItemLongClickListener itemLongClickListener =
new OnItemLongClickListener()
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
final String tag = ((TextView) view).getText().toString();
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(getString(R.string.shareEditDeleteTitle, tag));
builder.setItems(R.array.dialog_items, new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
switch (which)
case 0:
shareSearch(tag);
break;
case 1:
tagEditText.setText(tag);
queryEditText.setText(savedSearches.getString(tag, ""));
break;
case 2:
deleteSearch(tag);
break;
);
builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int id)
dialog.cancel();
);
builder.create().show();
return true;
;
private void shareSearch(String tag)
String urlString = getString(R.string.searchURL) + Uri.encode(savedSearches.getString(tag, ""), "UTF-8");
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.shareSubject));
shareIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.shareMessage, urlString));
shareIntent.setType("text/plain");
startActivity(Intent.createChooser(shareIntent, getString(R.string.shareSearch)));
private void deleteSearch(final String tag)
AlertDialog.Builder confirmBuilder = new AlertDialog.Builder(this);
confirmBuilder.setMessage(getString(R.string.confirmMessage, tag));
confirmBuilder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int id)
dialog.cancel();
);
confirmBuilder.setPositiveButton(getString(R.string.delete), new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int id)
tags.remove(tag);
SharedPreferences.Editor preferencesEditor = savedSearches.edit();
preferencesEditor.remove(tag);
preferencesEditor.apply();
adapter.notifyDataSetChanged();
);
confirmBuilder.create().show();
但是,我得到了某些行的代码错误:
第 79 行:OK 无法解析或不是字段
第 146 行:cancel 无法解析或不是字段
第 177 行:cancel 无法解析或不是字段
第 186 行:删除无法解析或不是字段
下面的链接显示了我对 activity_main.xml 的内容: Click here for the image
这些行可能有什么问题?这些行有问题,因为它们与this page 上的信息有关。
我也在使用 proram Eclipse Java EE IDE for Web Developers 来制作这个,以防你想知道我使用的是什么程序。我也在使用 API 18 来解决这个问题。
如果您想查看其他文件,请告诉我。
【问题讨论】:
这和 javascript 有关系吗? 我认为这些消息是不言自明的,即Line 77: missingMessage cannot be resolved or is not a field
代表builder.setMessage(R.string.missingMessage);
几乎说明了一切。
这个问题太笼统了。你不能只是转储你的整个代码和一堆错误的清单。见how to ask a good question。此外,我们鼓励您使用 Android Studio 进行应用程序开发。不清楚你为什么使用 Eclipse Web 开发版本
关于deleteSearch(final string tag)
错误...string
不是变量类型。 Java 区分大小写
我把它放在 javascript 类别中,因为我认为 '.java' 文件与此相关。无论如何,我对我的问题进行了编辑,因为我修复了大部分错误。
【参考方案1】:
我知道其中一些是我需要为 strings.xml 文件创建的字符串,但它们的值必须是“此文件丢失”之类的消息,还是必须是特殊整数?
他们需要在res/values/strings.xml
,是的。
这些值会为您编译成“特殊整数”,R.string.xxxxx
可以访问这些值。
我想这可以解决大多数错误,说“无法解决或不是字段”。
DialogInterference 无法解析为类型
你是说DialogInterface
吗?
MainActivity 类型中的方法 deleteSearch(string) 引用缺少的类型字符串
看看这条线。什么是string
?
private void deleteSearch(final string tag)
【讨论】:
好的,感谢您的帮助。我添加了丢失的字符串并删除了您指出的其他错误,因为它们是简单的错字。但是,第 79、146、177 和 186 行的错误仍然存在。这些行可能有什么问题?这些行有问题,因为它们与此页面上的信息相关:developer.android.com/reference/android/R.string.html 我也在使用 API 18,所以这可能是问题,因为我应该使用更高的 API?【参考方案2】:因此,经过检查,我发现其他行确实需要字符串,尽管它对 this page 上的某些 R.string
代码表示“取消”和“确定”。那么为什么 'cancel' 和 'OK' 在 strings.xml 中需要它们自己的字符串呢?
【讨论】:
以上是关于在最喜欢的网站应用程序上工作的主要内容,如果未能解决你的问题,请参考以下文章