- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的代码有问题。我将数据从一个 Activity 传递到另一个 Activity ,没有任何问题,但是当我尝试显示我从微调器中选择的时间表时,它给了我一个索引越界异常
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.app.AlertDialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.graphics.Color;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
public class TimetableMainActivity extends AppCompatActivity {
final String[] page_titles = new String[]{"Mon", "Tue", "Wed", "Thu", "Fri"};
final String[] hours = new String[]{"9", "10", "11", "noon", "1", "2", "3", "4", "5", "6"};
private String[][] days;
private int pos;
private String source = null;
public static ArrayList<String> schedule = new ArrayList<String>();
List<Map<String, String>>[] list = new List[5]; // Mon - Fri
Map<String, String> map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!isNetworkAvailable())
new AlertDialog.Builder(TimetableMainActivity.this).
setTitle("Error").setMessage("No Network Connection").
setNeutralButton("Close", null).show();
else {
new GetXML().execute("");
}
}
public boolean isNetworkAvailable() {
ConnectivityManager cm = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected())
return true;
else
return false;
}
private class GetXML extends AsyncTask<String, Void, String> {
String src = null;
@Override
protected String doInBackground(String... params) {
Bundle extras = getIntent().getExtras();
source = extras.getString("Name");
try {
URL url = new URL(source);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
src = readStream(con.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
return src;
}
@Override
protected void onPostExecute(String result) {
if (src == null)
new AlertDialog.Builder(TimetableMainActivity.this).
setTitle("Error").setMessage("No Schedule Found").
setNeutralButton("Close", null).show();
else parseXML(src);
setContentView(R.layout.activity_main_timetable);
days = new String[5][10];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 10; j++) {
int k = i * 10 + j;
days[i][j] = schedule.get(k);
}
}
for (int i = 0; i < 5; i++)
list[i] = new ArrayList<Map<String, String>>();
int count = hours.length;
for (int j = 0; j < 5; j++) {
for (int i = 0; i < count; i++) {
map = new HashMap<String, String>();
map.put("time", hours[i]);
map.put("description", days[j][i]);
list[j].add(map);
}
}
Calendar cal = Calendar.getInstance();
int today = cal.get(Calendar.DAY_OF_WEEK) - 2;
pos = 0;
if (today >= 0 && today <= 4)
pos = today;
ViewPager viewPager = findViewById(R.id.ViewPager);
CustomPagerAdapter adapter = new CustomPagerAdapter(TimetableMainActivity.this, list);
PagerTabStrip pagerTabStrip = findViewById(R.id.pager_tab);
int color = Color.parseColor("#33b7ee");
pagerTabStrip.setTabIndicatorColor(color);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(pos);
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
public void parseXML(String src) {
try {
StringReader sr = new StringReader(src);
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(sr);
int token = xpp.getEventType();
while (token != XmlPullParser.END_DOCUMENT) {
if (token == XmlPullParser.START_TAG) {
if (xpp.getName().equals("cid")) {
token = xpp.nextToken();
if (xpp.getText() == null)
schedule.add("");
if (token == XmlPullParser.TEXT) {
schedule.add(xpp.getText());
}
}
}
token = xpp.nextToken();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private String readStream(InputStream in) {
BufferedReader reader = null;
String line = null;
StringBuffer sb = new StringBuffer();
try {
reader = new BufferedReader(new InputStreamReader(in));
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
这是从第一个 Activity 传递数据的第二个 Activity ,位于此处:
public class ScheduleMainActivity extends AppCompatActivity {
final static String[] programs = { "Select Program", "Architectural",
"Civil", "Geomatics", "Computing Systems", "Biomedical",
"Instrumentation", "Electrical (Power)",
"Telecommunications", "Chemical Processing", "Industrial", "Mechanical",
"Manufacturing", "Petroleum" };
final static String[] years = { "Select Year", "First", "Second", "Third" };
String p = new String();
String y = new String();
String cid = new String();
String loc = new String();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_schedule);
Spinner spinner_p = (Spinner) findViewById(R.id.spinner_p);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(ScheduleMainActivity.this,
R.layout.spinnerrow, R.id.spinner_id, programs);
spinner_p.setAdapter(arrayAdapter);
spinner_p.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
switch(pos) {
case 1 : cid = "ae"; break;
case 2 : cid = "ce"; break;
case 3 : cid = "ge"; break;
case 4 : cid = "cs"; break;
case 5 : cid = "eb"; break;
case 6 : cid = "ei"; break;
case 7 : cid = "ep"; break;
case 8 : cid = "te"; break;
case 9 : cid = "cp"; break;
case 10: cid = "in"; break;
case 11: cid = "me"; break;
case 12: cid = "mm"; break;
case 13: cid = "pe"; break;
default: break;
}
p = programs[pos];
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
Spinner spinner_y = (Spinner) findViewById(R.id.spinner_y);
ArrayAdapter<String> y_arrayAdapter = new ArrayAdapter<String>(ScheduleMainActivity.this,
R.layout.spinnerrow, R.id.spinner_id, years);
spinner_y.setAdapter(y_arrayAdapter);
spinner_y.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
y = years[pos];
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
final Button b = (Button) findViewById(R.id.schedule);
b.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(v == b) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
v.setAlpha(.3f);
}
else {
v.setAlpha(1f);
}
}
return false;
}
});
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if(p.equals("Select Program") || y.equals("Select Year"))
new AlertDialog.Builder(ScheduleMainActivity.this).
setTitle("Error").setMessage("No Program/Year selected").
setNeutralButton("Close", null).show();
else {
Calendar cal = Calendar.getInstance();
SimpleDateFormat monthFormat = new SimpleDateFormat("M");
String month_name = monthFormat.format(cal.getTime());
int month = Integer.parseInt(month_name);
int selectedYear = 0;
if(y.equals("First"))
selectedYear = 1;
else if(y.equals("Second"))
selectedYear = 2;
else if(y.equals("Third"))
selectedYear = 3;
int semester = 0;
if(month >= 9 && month <= 12) {
semester = 3 * selectedYear - 2;
}
else if(month >= 1 && month <= 4) {
semester = 3 * selectedYear - 1;
}
else {
semester = 3 * selectedYear;
}
StringBuffer sb = new StringBuffer();
sb.append("http://branko-cirovic.appspot.com/etcapp/timetables/timetable_"); sb.append(cid); sb.append(semester); sb.append(".xml");
loc = sb.toString();
Toast.makeText(ScheduleMainActivity.this,"You Selected : "
+ loc, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(ScheduleMainActivity.this, TimetableMainActivity.class);
intent.putExtra("Name", loc);
startActivity(intent);
}
}
});
}
}
如果有人可以解决我的问题或告诉我如何解决它,我将不胜感激
最佳答案
所以问题实际上是我试图传递给第二个 Activity 的 URL,这是错误的。
通过将“Bundle extras”放入第二个 Activity 的 try 语句中,我现在已经可以正常工作了
关于TimetableMainActivity$GetXML.onPostExecute 处的 java.lang.IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53550525/
这个问题已经有答案了: What is the difference between a variable, object, and reference? [duplicate] (5 个回答) 已关
我正在使用以下代码来学习java套接字编程。它的作用是,client.java 程序从用户那里获取一个号码并将其发送到 sever.java。然后服务器将其乘以2并发回给客户端。在我的客户端程序中,它
我编写了一个自己开发的串行端口类,为了简单起见,我使用了阻塞/同步/非重叠。我浏览了所有 MSDN 文档,这对我来说很困难。 我在从端口打开、传输或接收字节方面没有任何问题。所有操作都是同步并且没有线
//Not finished -- disregard function evaluate() { var cdate = new Date(); var cday = cdate.getDa
我已经尝试过了,但它有效 例如: x= 523.897 y= x[0:"."] print y 我只想打印 523。如何让 Python 抓取字符串直到某个字母或数字? 最佳答案 行 y = x[0:
我想移动拐 Angular 处的方框(从左上角开始水平移动 Angular 落到右上角然后你去到右下角。 function myMove() { var elem = document.getEl
如何让侧边栏停止在第二个侧边栏部分而不是顶部? fiddle http://jsfiddle.net/EvAdP/2/ HTML I'm the header
我刚刚在大学开始我的第二门编程类(class),我们的第一个作业相当简单,旨在基本上检查我们的环境并检查我们是否知道如何通过类(class)网站提交作业。 当我运行我们提供的代码时,它卡在应该提示用户
我目前正忙于我的这个信息学元素(构建一个示例交友网站)。问题是我在把所有东西都放在正确的地方时遇到了一些麻烦。一切都很顺利,直到我的邮箱出现在错误的位置(但是,Dreamweaver 会按照我的意
我想,和你一样hover a GIF shot on Dribbble , 当光标位于元素高度顶部之后/50% 处时显示带有信息的 div。 测试示例 我做了这个,这是有效的,但有点棘手......特
我有一个下拉菜单,并且我已将 mouseenter 设置为选项。因此,如果鼠标位于触发器之外,菜单应该关闭。我正在使用 jQuery 1.8.0。这可能是 CSS 问题吗? 这是我初始化插件的代码。
我正在尝试在 Visual Basic for Applications 中编写一个 hello world 应用程序,即修改 Excel 工作表中的单元格。这是: Sub hello() D
我的应用程序使用 JSF 2.1 和 PrimeFaces。最近,由于一些线程卡住,观察到 CPU 利用率非常高。所有卡住线程的卡住线程转储都指向 javax.faces.component.UICo
在列出 aws cognito 用户时,我的 Node js 应用程序遇到问题。 仅当我有超过 60 个 Cognito 用户时才会出现此问题。 Reference of API 下面是我的代码片段。
我是 ubuntu 用户..我在 php 中有一个执行 python 文件的命令..python 文件设置为可执行文件..所以,我的 php 命令是:- shell_exec("try.py");
我正在尝试将剪贴板内容写入文件,但由于某种原因程序卡住了。 FILE *fp; fp = fopen("tmp.code","w"); fprintf(fp,getclip()); /*writes*
当用户向下滚动时,我使用此代码使侧边栏固定在某个 div 处。问题是我必须手动输入一个阈值数字,这并不总是理想的,因为该部分的位置可能会更改或在各种浏览器和系统之间不一致。我想知道是否有一种方法可以在
我有一个字符串数组,例如 first_page = {{"U","M","Y","Q","I","A","L","D","P"、"F"、"E"、"G"、"T"、"Z"、"V"、"W"、"H"、"O"、
我能否在页面上的特定 px 位置放置一个元素(例如图像),然后让文本围绕它流动? 必要时使用 JS/jquery。 我确实看到了这个Have text flow around an object th
第一次在这里提问。 我有两个简单的 Javascript 函数,1. 生成一个随机字母,2. 在每个单元格中使用单个字母填充 10x10 表格。创建表的主要函数是通过带有 onclick 的简单 HT
我是一名优秀的程序员,十分优秀!